home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Express Pd: GALORE
/
Express Pd Galore - The Amiga PD & Shareware CD (1994)(Express Pd)[!][Amiga-CD32-CDTV].iso
/
amicus
/
amicus_#5
/
iff
/
ilbmdump.c
< prev
next >
Wrap
C/C++ Source or Header
|
1978-01-03
|
5KB
|
132 lines
/*--------------------------------------------------------------*/
/* */
/* ILBMDump.c: reads in ILBM, prints out ascii representation, */
/* for including in C files. */
/* */
/* By Jerry Morrison and Steve Shaw, Electronic Arts. */
/* This software is in the public domain. */
/* */
/* This version for the Commodore-Amiga computer. */
/* */
/* Callable from CLI ONLY */
/* Jan 31, 1986 */
/*--------------------------------------------------------------*/
#include "iff/intuall.h"
#include "libraries/dos.h"
#include "libraries/dosextens.h"
#include "iff/ilbm.h"
#include "iff/readpict.h"
#include "iff/remalloc.h"
#undef NULL
#include "lattice/stdio.h"
/*----------------------------------------------------------------------*/
/* Iff error messages */
/*----------------------------------------------------------------------*/
char MsgOkay[] = { "----- (IFF_OKAY) A good IFF file." };
char MsgEndMark[] = {"----- (END_MARK) How did you get this message??" };
char MsgDone[] = { "----- (IFF_DONE) How did you get this message??" };
char MsgDos[] = { "----- (DOS_ERROR) The DOS gave back an error." };
char MsgNot[] = { "----- (NOT_IFF) not an IFF file." };
char MsgNoFile[] = { "----- (NO_FILE) no such file found." };
char MsgClientError[] = {"----- (CLIENT_ERROR) IFF Checker bug."};
char MsgForm[] = { "----- (BAD_FORM) How did you get this message??" };
char MsgShort[] = { "----- (SHORT_CHUNK) How did you get this message??" };
char MsgBad[] = { "----- (BAD_IFF) a mangled IFF file." };
/* MUST GET THESE IN RIGHT ORDER!!*/
char *IFFPMessages[-LAST_ERROR+1] = {
/*IFF_OKAY*/ MsgOkay,
/*END_MARK*/ MsgEndMark,
/*IFF_DONE*/ MsgDone,
/*DOS_ERROR*/ MsgDos,
/*NOT_IFF*/ MsgNot,
/*NO_FILE*/ MsgNoFile,
/*CLIENT_ERROR*/ MsgClientError,
/*BAD_FORM*/ MsgForm,
/*SHORT_CHUNK*/ MsgShort,
/*BAD_IFF*/ MsgBad
};
/* this returns a string containing characters after the
last '/' or ':' */
GetSuffix(to, fr) UBYTE *to, *fr; {
int i;
UBYTE c,*s = fr;
for (i=0; ;i++) {
c = *s++;
if (c == 0) break;
if (c == '/') fr = s;
else if (c == ':') fr = s;
}
strcpy(to,fr);
}
LONG GfxBase;
struct BitMap bitmap = {0};
ILBMFrame ilbmFrame; /* Top level "client frame".*/
/** main() ******************************************************************/
UBYTE defSwitch[] = "b";
void main(argc, argv) int argc; char **argv; {
UBYTE *sw;
FILE *fp;
LONG iffp,file;
UBYTE name[40], fname[40];
GfxBase = (LONG)OpenLibrary("graphics.library",0);
if (GfxBase==NULL) exit(0);
if (argc) {
/* Invoked via CLI. Make a lock for current directory. */
if (argc < 2) {
printf("Usage from CLI: 'ILBMDump filename switch-string'\n");
printf(" where switch-string = \n");
printf(" <nothing> : Bob format (default)\n");
printf(" s : Sprite format (with header and trailer words)\n");
printf(" sn : Sprite format (No header and trailer words)\n");
printf(" a : Attached sprite (with header and trailer)\n");
printf(" an : Attached sprite (No header and trailer)\n");
printf(" Add 'c' to switch list to output CR's with LF's \n");
}
else {
sw = (argc>2)? argv[2]: defSwitch;
file = Open(argv[1], MODE_OLDFILE);
if (file) {
iffp = ReadPicture(file, &bitmap, &ilbmFrame, ChipAlloc);
Close(file);
if (iffp != IFF_DONE) {
printf(" Couldn't read file %s \n", argv[1]);
printf("%s\n",IFFPMessages[-iffp]);
}
else {
printf(" Creating file %s.c \n",argv[1]);
GetSuffix(name,argv[1]);
strcpy(fname,argv[1]);
strcat(fname,".c");
fp = fopen(fname,"w");
BMPrintCRep(&bitmap,fp,name,sw);
fclose(fp);
}
}
else printf(" Couldn't open file: %s. \n", argv[1]);
if (bitmap.Planes[0]) RemFree(bitmap.Planes[0]);
printf("\n");
}
}
CloseLibrary(GfxBase);
exit(0);
}